﻿using System.Linq;
using McReports.Common;
using McReports.ViewModel;
using System.Diagnostics.Contracts;

namespace McReports
{

    public class ReportFactoryBase
    {
        /// <summary>
        /// Получает или устанавливает провайдер пользовательского интерфейса для ввода параметров запроса
        /// </summary>
        public IUiQueryParametersProvider UiQueryParametersProvider { get; set; }   
        
        public void CreateReport(BaseReportViewModel reportViewModel)
        {
            if (!reportViewModel.NeedsInputParameters || 
                (reportViewModel.NeedsInputParameters &&
                QueryInputParameters(reportViewModel)))
            {
                reportViewModel.SetReport();
            }
        }

        private bool QueryInputParameters(BaseReportViewModel reportViewModel)
        {
            Contract.Requires(reportViewModel != null);
            Contract.Requires(UiQueryParametersProvider != null);
            if (reportViewModel.Parameters == null || !reportViewModel.Parameters.Any()) return true;             
            UiQueryParametersProvider.ViewModel = reportViewModel;
            return UiQueryParametersProvider.GetParameters();                   
        }
    }

    //public class ExcelReportFactory : ReportFactoryBase
    //{
     
    //}

    //public class WordReportFactory : ReportFactoryBase
    //{
    
    //    public static void CreateReport(BaseReportViewModel reportViewModel)
    //    {
    //        if (!reportViewModel.NeedsInputParameters || (reportViewModel.NeedsInputParameters && QueryInputParameters(reportViewModel)))
    //        {
    //            reportViewModel.SetReport();
    //        }
    //    }

    //    private static bool QueryInputParameters(BaseReportViewModel reportViewModel)
    //    {
    //        bool res = false;
    //        if (reportViewModel.Parameters != null&&reportViewModel.Parameters.Count() > 0)
    //        {
    //            var reportParamsWindow = new ReportParamsWindow(reportViewModel);
    //            reportParamsWindow.ShowDialog();
    //            if (reportParamsWindow.DialogResult == true) res = true;
    //        }
    //        else res = true;
    //        return res;
    //    }
    //}

    //public class ReportFactory
    //{
    //    public static void CreateReport(BaseReportViewModel reportViewModel)
    //    {
    //        if (!reportViewModel.NeedsInputParameters||(reportViewModel.NeedsInputParameters&&QueryInputParameters(reportViewModel) == true))
    //        {
    //            var dlg = new ReportViewerHost();
    //            dlg.DataContext = reportViewModel;
    //            dlg.Show();
    //        }
    //    }

    //    private static bool QueryInputParameters(BaseReportViewModel reportViewModel)
    //    {
    //        bool res = false;
    //        if (reportViewModel.Parameters != null)
    //        {
    //            var reportParamsWindow = new ReportParamsWindow(reportViewModel);
    //            reportParamsWindow.ShowDialog();
    //            if (reportParamsWindow.DialogResult == true) res = true;
    //        }
    //        else res = true;
    //        return res;
    //    }
    //}
}
